/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vista.modelo;

import basedatos.OperacionesBD;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.JList;
import modulos.cie10.modelo.Capitulo;
import modulos.cie10.modelo.Categoria;
import modulos.cie10.modelo.Fuente;
import modulos.cie10.modelo.Subcategoria;

public class EnlaceCIE10 {

    public static DefaultListModel dlmCategoria = new DefaultListModel();
    public static DefaultListModel dlmSubCategoria = new DefaultListModel();
    public static boolean datoFuente = false;
    public static boolean datoCapitulo = false;
    public static ArrayList<Object> fuentes;
    public static ArrayList<Object> capitulos;
    public static ArrayList<Object> categorias;
    public static ArrayList<Object> subcategorias;

    public static void listarTodo() {
        fuentes = (ArrayList<Object>) OperacionesBD.listar("Fuente");
        capitulos = (ArrayList<Object>) OperacionesBD.listar("Capitulo");
        categorias = (ArrayList<Object>) OperacionesBD.listar("Categoria");
        subcategorias = (ArrayList<Object>) OperacionesBD.listar("Subcategoria");
    }

    public static boolean buscaRepetido(String busqueda, int id) {
        boolean repetido = false;
        ArrayList<Object> lista = devuelveLista(id);
        String nombre = "";
        for (int i = 0; i < lista.size(); i++) {
            if (id == 1) {
                Fuente f = (Fuente) lista.get(i);
                nombre = f.getNombre();
            } else if (id == 2) {
                Capitulo f = (Capitulo) lista.get(i);
                nombre = f.getNombre();
            } else if (id == 3) {
                Categoria f = (Categoria) lista.get(i);
                nombre = f.getNombre();
            } else if (id == 4) {
                Subcategoria f = (Subcategoria) lista.get(i);
                nombre = f.getNombre();
            }
            if (busqueda.toLowerCase().equalsIgnoreCase(nombre.toLowerCase())) {
                repetido = true;
            }
        }
        return repetido;
    }

    public static ArrayList<Object> devuelveLista(int id) {
        ArrayList<Object> lista = null;
        if (id == 1) {
            lista = fuentes;
        } else if (id == 2) {
            lista = capitulos;
        } else if (id == 3) {
            lista = categorias;
        } else if (id == 4) {
            lista = subcategorias;
        }
        return lista;
    }

    public static Object buscar(JComboBox cb, int id) {
        Object o = null, l = null;
        ArrayList<Object> lista = devuelveLista(id);
        String s = String.valueOf(cb.getSelectedItem());
        String nombre = "";
        for (int i = 0; i < lista.size(); i++) {
            if (id == 1) {
                Fuente f = (Fuente) lista.get(i);
                nombre = f.getNombre();
                l = f;
            } else if (id == 2) {
                Capitulo f = (Capitulo) lista.get(i);
                nombre = f.getNombre();
                l = f;
            } else if (id == 3) {
                Categoria f = (Categoria) lista.get(i);
                nombre = f.getNombre();
                l = f;
            } else if (id == 4) {
                Subcategoria f = (Subcategoria) lista.get(i);
                nombre = f.getNombre();
                l = f;
            }
            if (s.equals(nombre)) {
                o = l;
            }
        }
        return o;
    }

    public static void poneComboFuente(JComboBox cb, int id) {
        ArrayList<Object> lista = devuelveLista(id);
        cb.removeAllItems();
        if (!datoFuente) {
            cb.addItem("Seleccione Fuente");
        }
        if (!lista.isEmpty()) {
            for (int i = 0; i < lista.size(); i++) {
                Fuente f = (Fuente) lista.get(i);
                String nombre = f.getNombre();
                cb.addItem(nombre);
            }
        }
    }

    public static void poneComboOtros(JComboBox cb, int valor, int id) {
        int n = 0, v = 0;
        String nombre = null;
        ArrayList<Object> lista = devuelveLista(id);
        cb.removeAllItems();
        if (id == 2) {
            if (!datoCapitulo) {
                cb.addItem("Seleccione Capitulo");
            }
        } else if (id == 3) {
            cb.addItem("Seleccione Categoria");
        } else if (id == 4) {
            cb.addItem("Seleccione Subcategoria");
        }
        if (!lista.isEmpty() && valor != 0) {
            for (int i = 0; i < lista.size(); i++) {
                if (id == 2) {
                    Capitulo f = (Capitulo) lista.get(i);
                    nombre = f.getNombre();
                    n = f.getFuente().getIdFuente();
                } else if (id == 3) {
                    Categoria f = (Categoria) lista.get(i);
                    nombre = f.getNombre();
                    n = f.getCapitulo().getIdCapitulo();
                } else if (id == 4) {
                    Subcategoria f = (Subcategoria) lista.get(i);
                    nombre = f.getNombre();
                    n = f.getCategoria().getIdCategoria();
                }

                if (valor == n) {
                    cb.addItem(nombre);
                }
            }
        }
    }

    public static void poneListaCategoria(JList ls, int valor, int id) {
        ArrayList<Object> lista = devuelveLista(id);
        ls.removeAll();
        if (!lista.isEmpty()) {
            dlmCategoria.removeAllElements();
            for (int i = 0; i < lista.size(); i++) {
                Categoria c = (Categoria) lista.get(i);
                if (valor == c.getCapitulo().getIdCapitulo()) {
                    dlmCategoria.addElement(c.getNombre());
                }
            }
        }
        ls.setModel(dlmCategoria);
        ls.setSelectedIndex(0);
    }

    public static void poneListaSubCategoria(JList ls, int valor, int id) {
        ArrayList<Object> lista = devuelveLista(id);
        ls.removeAll();
        if (!lista.isEmpty()) {
            dlmSubCategoria.removeAllElements();
            for (int i = 0; i < lista.size(); i++) {
                Subcategoria s = (Subcategoria) lista.get(i);
                if (valor == s.getCategoria().getIdCategoria()) {
                    dlmSubCategoria.addElement(s.getNombre());
                }
            }
        }
        ls.setModel(dlmSubCategoria);
        //ls.setSelectedIndex(0);
    }

    //Buscar Categoria
    public static Object buscarLis(int indice) {
        Object c = null;
        ArrayList<Object> lista = categorias;
        if (indice >= 0) {
            String s = String.valueOf(dlmCategoria.getElementAt(indice));
            for (int i = 0; i < lista.size(); i++) {
                Categoria cat = (Categoria) lista.get(i);
                if (s.equals(cat.getNombre())) {
                    c = cat;
                }
            }
        }
        return c;
    }

    public static void busquedaPredictiva(JList ls, int fuente, String texto) {
        DefaultListModel dlm = dlmSubCategoria;
        List<Object> lista = OperacionesBD.listarPrediccion("Subcategoria", "nombre", texto);
//        ls.removeAll();
        if (!lista.isEmpty()) {
            dlm.removeAllElements();
            for (int i = 0; i < lista.size(); i++) {
                Subcategoria s = (Subcategoria) lista.get(i);
                if (s.getCategoria().getCapitulo().getFuente().getIdFuente() == fuente) {
                    String tex = s.getNombre().toLowerCase();
                    if (tex.contains(texto.toLowerCase())) {
                        dlm.addElement(s.getNombre());
                    }
                }
            }
        } else {
            dlm.removeAllElements();
        }
        ls.setModel(dlmSubCategoria);
    }
}
